package com.sfx.service.impl;

import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.sfx.domain.entity.Menu;
import com.sfx.mapper.MenuMapper;
import com.sfx.service.MenuService;
import org.springframework.stereotype.Service;

import java.util.List;
import java.util.stream.Collectors;

import static com.sfx.constants.SystemConstants.ROLE_STATUS_NORMAL;

/**
* Created with IntelliJ IDEA.
* Description:
* User: sfx
* Date: 2023-07-15
* Time: 16:37
*/
@Service
public class MenuServiceImpl extends ServiceImpl<MenuMapper, Menu> implements MenuService{

    /**
     * 根据userId查询权限信息
     * @param userId
     * @return
     */
    @Override
    public List<String> selectPermissionsByUserId(Long userId) {
        //1.是超级管理员
        if(userId == 1L) {
            //所有菜单类型为C或者F的，状态为正常的，未被删除的权限
            LambdaQueryWrapper<Menu> queryWrapper = new LambdaQueryWrapper<>();
            queryWrapper.in(Menu::getMenuType,ROLE_STATUS_NORMAL);
            queryWrapper.eq(Menu::getStatus,ROLE_STATUS_NORMAL);
            List<Menu> menus = list(queryWrapper);
            return menus.stream().map(Menu::getPerms).collect(Collectors.toList());
        }
        //2.不是超级管理员,就需要查询该用户的所有权限
        List<String> strings = getBaseMapper().selectPermissionsByUserId(userId);
        return strings;

//        //2.查询用户有哪些角色
//        //2.1查询当前userId有哪些角色
//        List<UserRole> userRoles = userRoleService.query().eq("user_id", userId).list();
//        //2.2将角色转换成角色ID列表
//        List<Long> roleIds = userRoles.stream().map(UserRole::getRoleId).collect(Collectors.toList());
//        //3.去role_menu表,根据角色Id查询都有哪些menuId
//        List<RoleMenu> roleMenus = roleMenuService.query().in("role_id", roleIds).list();
//        List<Long> menuIds = roleMenus.stream().map(RoleMenu::getMenuId).collect(Collectors.toList());
//        //4.去menu表中封装正常的,未被删除的权限的menu
//        List<Menu> menus = query().in("id", menuIds).eq("status", ROLE_STATUS_NORMAL).list();
//        return menus.stream().map(Menu::getPerms).collect(Collectors.toList());
    }
}
